package com.w7vm.menuweb.managerBean;

import java.io.IOException;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import org.primefaces.context.RequestContext;

import com.w7vm.menuweb.entity.AlimentosTiposSy;
import com.w7vm.menuweb.entity.CardapioBuffetWeb;
import com.w7vm.menuweb.entity.CardapioEspecialidadeWeb;
import com.w7vm.menuweb.entity.CardapioInfantilWeb;
import com.w7vm.menuweb.entity.CardapioLaCarteWeb;
import com.w7vm.menuweb.entity.CardapioSelfServiceWeb;
import com.w7vm.menuweb.entity.ComposicaoCardInfantilWeb;
import com.w7vm.menuweb.entity.ComposicaoCardLaCarteWeb;
import com.w7vm.menuweb.entity.ComposicaoCardSelfServiceWeb;
import com.w7vm.menuweb.entity.PratoSy;
import com.w7vm.menuweb.entity.RestauranteFilialWeb;
import com.w7vm.menuweb.entity.RestauranteSedeWeb;
import com.w7vm.menuweb.facade.AlimentoFacade;
import com.w7vm.menuweb.facade.CardapioG2Facade;
import com.w7vm.menuweb.facade.PratoFacade;
import com.w7vm.menuweb.facade.RestauranteFilialFacade;
import com.w7vm.menuweb.facade.RestauranteSedeFacade;
import com.w7vm.menuweb.message.MessageFaces;
import com.w7vm.menuweb.service.AlimentosService;
import com.w7vm.menuweb.utility.Constantes;
import com.w7vm.menuweb.utility.DataUtils;
import com.w7vm.menuweb.utility.FacesUtil;
import com.w7vm.menuweb.utility.PropertiesLoaderImpl;
import com.w7vm.menuweb.vo.AlimentoVO;
import com.w7vm.menuweb.vo.CardapioVO;

@ManagedBean
@ViewScoped
public class CardapioG2MB implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@EJB
	private CardapioG2Facade cardapioG2EJB;

	@EJB
	private RestauranteSedeFacade sedeEJB;
	RestauranteSedeWeb restSede = new RestauranteSedeWeb();

	@EJB
	private RestauranteFilialFacade filialEJB;
	RestauranteFilialWeb restFilial = new RestauranteFilialWeb();
	
	@EJB
	private AlimentoFacade alimentoEJB;

	@EJB
	private PratoFacade pratoEJB;
	private List<PratoSy> pratoL = null;

	Constantes constObj = new Constantes();
	CardapioVO cardapioVO = new CardapioVO();
	private MessageFaces message = new MessageFaces();
	private LoginMB loginOjb = new LoginMB();
	
	private CardapioLaCarteWeb laCarteEntity = new CardapioLaCarteWeb();
	private CardapioInfantilWeb infantilEntity = new CardapioInfantilWeb();

	private	CardapioEspecialidadeWeb especialidadeEntity = new CardapioEspecialidadeWeb();

	private List<SelectItem> cardapios;

	private List<AlimentoVO> alimentoTipoL = null;
	private List<AlimentosTiposSy> alimentosGeraisL = null;
	private List<AlimentoVO> alimentoL = null;
	
	private String selectedTipoAlimento;
	private List<AlimentoVO> selectedAlimentoL = new ArrayList<AlimentoVO>();
	private AlimentoVO alimentoVO = new AlimentoVO();
	
	// Variaveis Status : Layout Tela
	private boolean selectedG2PrFrio = true; 
	private boolean selectedG2Sobremesa = true; 
	private boolean selectedG2Couvert = true; 
	private boolean selectedG2PrAcompanhamento = true;
	private boolean selectedG2PrQuente = true;
	private boolean selectedPanelCadastro = true;
	private boolean selectedPanelReportCad = false;
	

	private int i = -1;
	
	// List entidade Alimentos
	private List<AlimentoVO> avesL = null;
	private List<AlimentoVO> bovinaL = null;
	private List<AlimentoVO> suinaL = null;
	private List<AlimentoVO> peixeL = null;
	private List<AlimentoVO> frutaL = null;
	private List<AlimentoVO> hortalicaL = null;
	private List<AlimentoVO> doceL = null;
	private List<AlimentoVO> cereaisL = null;
	private List<AlimentoVO> massaL = null;
	private List<AlimentoVO> alimentosDefinidosL = null;
	
	
	// Variaveis : Layout Tela Nome
	private String tipoCardapio;
	private String nomeTelaCadastro;
	private String nomeTelaReport;
	private String nomeTelaCaracteristica;
	private String nomeTelaComposicao;
	private String nomeTelaAgendamento;
	private String nomeCardapio;
	private String selectTipoPrato;
	private String mensagem;

	private String testeVO;

	private boolean statusSolicitacaoProxTela = false;
	
	private Date dtAtual;
	private Date dtExpContrato;
	private List<String> selectDiasSemana;
	private Boolean opcDataTermino = true;
	
	private List<String> nomeAliEspecialidadeL = new ArrayList<String>();
	private String nomeTipoAlimento;

	private String semanaDia;
	private boolean diaSegunda = false;
	private boolean diaTerca = false;
	private boolean diaQuarta = false;
	private boolean diaQuinta = false;
	private boolean diaSexta = false;
	private boolean diaSabado = false;
	private boolean diaDomingo = false;
	private String dia;
	private boolean statusDias;
	
	
	// Variaveis : Layout Tela Visibilidade
	private boolean statusPratoFrio = true;
	private boolean statusPratoQuente = true;
	private boolean statusSobremesa = false;
	private boolean statusAcompanhamento = false;
	private boolean statusTelaCaracteristica = false;
	private boolean statusValidacaoCampo = false;
	

	public CardapioG2MB() {
		System.out.println("CardapioMB()");
		controllCardapiosGrupo();
	}
	
	
// ==================== METHOD REDIRECT -- ===========================


	// CardapioG1 : Buffet | SelfService
	public void redirecionaCardapioOpcao(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("../../../user/cardapio/opcaoCardapios.jsf");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// CardapioG1 : Buffet | SelfService
	public void redirecionaPortalHome(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("../../../user/portalCardapioMundo.jsf");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	// CardapioG1 : Buffet | SelfService
	public void redirecionaCardapioG2(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("../../../user/cardapio/cardapioG2/cadCardapioG2.jsf");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
// ============= METHOD LOAD TELA CADASTRO -- Cardapio G2 (LACARTE | INFANTIL) ===========================


	public void controllCardapiosGrupo(){
		System.out.println("controllCardapiosGrupo()");
		
		tipoCardapio = (String) FacesUtil.getApplicationMapValue("CardapioOpcaoMB.value");
		System.out.println("controllCardapiosGrupo --> tipoCardapio  "+ tipoCardapio);
		
		setStatusTelaCaracteristica(true);
		
		// CARDAPIO G2
		if (tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
			loadCardapioG2LaCarte();
		}
		else if (tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
			loadCardapioG1Infantil();
		}
	}

	//Cardapio G2 :: LaCarte 
	public void loadCardapioG2LaCarte(){
		System.out.println("loadCardapioG1Buffet --> tipoCardapio  "+ tipoCardapio);

		nomeTelaCadastro = "Cadastro Cardápio - LaCarte";
		nomeTelaCaracteristica = "Característica Cardápio - LaCarte";
		nomeTelaComposicao = "Composição Alimentar Cardápio - LaCarte";
		nomeTelaAgendamento = "Agendamento Cardápio - LaCarte";
		nomeTelaReport = "REPORT CONFIRMAÇÃO CARDÁPIO";
		nomeCardapio = "CARDÁPIO LACARTE";
	}

	//Cardapio G2 :: Infantil
	public void loadCardapioG1Infantil(){
		System.out.println("loadCardapioG1SelfService --> tipoCardapio  "+ tipoCardapio);

		nomeTelaCadastro = "Cadastro Cardápio - Infantil";
		nomeTelaCaracteristica = "Característica Cardápio - Infantil";
		nomeTelaComposicao = "Composição Alimentar Cardápio - Infantil";
		nomeTelaAgendamento = "Agendamento Cardápio - Infantil";
		nomeCardapio = "CARDÁPIO INFANTIL";
	}
	
// ======= METHOD LOAD -- ALIMENTOSVO view object ===========================

	public List<AlimentoVO> loadTipoAlimentos(){
		System.out.println("loadTipoAlimentos ================================================= ");
		AlimentosService alimentoService = new AlimentosService();

		alimentosGeraisL = alimentoEJB.getFindAlimentosTiposByAll();
		
		System.out.println("loadTipoAlimentos getFindAlimentosTiposByAll  "+ alimentosGeraisL.size());
		if(alimentosGeraisL != null)
		{
			alimentoTipoL = alimentoService.convertListaAlimentoTipo(alimentosGeraisL);
		}
		System.out.println("loadTipoAlimentos ================================================  "+ alimentoTipoL.size());
		return alimentoTipoL;
	}
	
	public List<AlimentoVO> loadAlimentosComposicao(List<AlimentosTiposSy> alimentosGeraisL, String tipoAlimento){
		System.out.println("BEGIN loadAlimentosComposicao ================================================= ");
		
		AlimentosService alimentoService = new AlimentosService();
		alimentoL = alimentoService.convertListaAlimentoComposicao(alimentosGeraisL, tipoAlimento);
		System.out.println("END loadAlimentosComposicao ================================================  "+ alimentoL.size());
		return alimentoL;
	}
	
	public List<AlimentoVO> loadAlimentosDefinidosL(){
		System.out.println("BEGIN loadAlimentosDefinidosL ================================================= ");
		List<AlimentoVO> defineAlimentoL = new ArrayList<AlimentoVO>();
		
		System.out.println("AVES...................."+ avesL);
		System.out.println("BOVINO...................."+ bovinaL);
		
		if(avesL != null){
			defineAlimentoL.addAll(avesL);
			
			
			for(AlimentoVO a : avesL){
				System.out.println("ID AVES.............................................."+ a.getId());
			}
			
		}
		
		if(bovinaL != null){
			defineAlimentoL.addAll(bovinaL);
		}
		
		if(suinaL != null){
			defineAlimentoL.addAll(suinaL);
		}
		
		if(peixeL != null){
			defineAlimentoL.addAll(peixeL);
		}
		
		if(frutaL != null){
			defineAlimentoL.addAll(frutaL);
		}
		
		if(hortalicaL != null){
			defineAlimentoL.addAll(hortalicaL);
		}
		
		if(doceL != null){
			defineAlimentoL.addAll(doceL);
		}
		
		if(cereaisL != null){
			defineAlimentoL.addAll(cereaisL);
		}
		
		if(massaL != null){
			defineAlimentoL.addAll(massaL);
		}
		System.out.println("END loadAlimentosDefinidosL ================================================  ");
		return defineAlimentoL;
	}


// ========================== METHOD VALIDATION -- CAMPOS =======================================================
	
	
	public void validaCaracteristicaCardapio(){
		System.out.println("validaCaracteristicaCardapio() ");

		
		if(selectedG2PrQuente == false && selectedG2PrFrio == false
				&& selectedG2Couvert == false && selectedG2Sobremesa == false && selectedG2PrAcompanhamento == false){

			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaCaracteristicaCard");
			message.sendErrorMessageToUser(msgTitulo, "msgOpcao");
		}
		else{
			RequestContext context = RequestContext.getCurrentInstance();
			context.execute("PF('dlgCaracteristicaCardapio').hide();");
		}
	}
	
	public void validaComposicaoAlimentos(){
		System.out.println("validaCamposComposicao() ");

		if(avesL == null && bovinaL == null && suinaL == null && 
				peixeL == null && frutaL == null && hortalicaL == null &&
				doceL == null && cereaisL == null && massaL== null){

			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaComposicao");
			message.sendErrorMessageToUser(msgTitulo, "msgComposicao");
		}
		else{
			RequestContext context = RequestContext.getCurrentInstance();
			context.execute("PF('dlgAgendamento').show();");
		}
	}
	
	public boolean validaAgendamentoCardapio(){
		System.out.println("validaAgendamentoCardapio() ");
		boolean retorno = false;
		DataUtils dateCheck = new DataUtils();
		String dataNowS;

		if(selectDiasSemana.size() == 0){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgDiasSemana");
			System.out.println("validaAgendamentoCardapio  "+ msgTitulo);
			message.sendErrorMessageToUser(msgTitulo, "msgAgendamento");
			retorno = true;
			return retorno; 
		}
		
		if(cardapioVO.getDtInicio() == null){
			String msgTitulo = PropertiesLoaderImpl.getValor("dtInicioAgendamento");
			System.out.println("validaAgendamentoCardapio  "+ msgTitulo);
			message.sendErrorMessageToUser(msgTitulo, "msgAgendamento");
			retorno = true;
			return retorno; 
		}
		else{
			SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy");
			dataNowS = DATE_FORMAT.format(cardapioVO.getDtInicio());
			
			if(dateCheck.validaData(dataNowS) == false){
				String msgTitulo = PropertiesLoaderImpl.getValor("dtInicioCardapioInvalida");
				System.out.println("dtInvalida  "+ msgTitulo);
				message.sendErrorMessageToUser(msgTitulo, "msgAgendamento");
				retorno = true;
				return retorno; 
			}
		}
		
		if(cardapioVO.getDtTermino() != null){
			SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
			dataNowS = DATE_FORMAT.format(cardapioVO.getDtTermino());
			String date = DATE_FORMAT.format(cardapioVO.getDtTermino());
			cardapioVO.setDtFormatadaTermino(date);  

			if(cardapioVO.getDtTermino().before(cardapioVO.getDtInicio())){
				String msgTitulo = PropertiesLoaderImpl.getValor("dtFimRegraAtiva");
				System.out.println("validaAgendamentoCardapio  "+ msgTitulo);
				message.sendErrorMessageToUser(msgTitulo, "agendamentoDias");
				retorno = true;
				return retorno; 
			}
			if(dateCheck.validaData(dataNowS) == false){
				String msgTitulo = PropertiesLoaderImpl.getValor("dtFimCardapioInvalida");
				System.out.println("dtInvalida  "+ msgTitulo);
				message.sendErrorMessageToUser(msgTitulo, "agendamentoDias");
				retorno = true;
				return retorno; 
			}
		}
		else if (cardapioVO.getDtTermino() == null){
			SimpleDateFormat sfd = new SimpleDateFormat("dd/MM/yyyy");
			Date dateTerm = new Date();
			String dtTermino = (String) loginOjb.getSessao("DtTerminoContrato");
			try {
				dateTerm = sfd.parse(dtTermino);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			
			String dateTermino = sfd.format(dateTerm);
			cardapioVO.setDtFormatadaTermino(dateTermino);  
		}


		if(retorno == false){
			selectedPanelCadastro = false;
			selectedPanelReportCad = true;
			statusTelaCaracteristica = false;
			RequestContext context3 = RequestContext.getCurrentInstance();
			context3.execute("PF('dlgReport').show();");
		}
		return retorno; 
	}
	
public boolean validaCamposCadastro(){
		System.out.println("[Method][ValidaCamposCadastro()]...............");
		
		boolean statusValidacaoPS = false;
		
		
		if(selectedG2PrQuente == true){
			if(cardapioVO.getEntradasQuentes().equals("")){
				System.out.println("getEntradasQuentes........+++++++++++++++++++++++.......");
				statusValidacaoPS = true;
			}
		}
		
		if(selectedG2PrAcompanhamento == true){
			if(cardapioVO.getAcompanhamento().equals("")){
				System.out.println("getAcompanhamento........+++++++++++++++++++++++.......");
				statusValidacaoPS = true;
			}
		}


		if(selectedG2PrFrio == true){
			if(cardapioVO.getEntradasFrias().equals("")){
				System.out.println("getEntradasFrias...............");
				statusValidacaoPS = true;
			}
		}
		
		if(selectedG2Sobremesa == true ){
			if(cardapioVO.getSobremesa().equals("")){
				System.out.println("getSobremesa...............");
				statusValidacaoPS = true;
			}
		}

		if(selectedG2Couvert == true){
			if(cardapioVO.getCouvert().equals("")){
				System.out.println("getCortesia...............");
				statusValidacaoPS = true;
			}
		}
		
		if(cardapioVO.getNomePrato().equals("")){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaNomePrato");
			message.sendErrorMessageToUser(msgTitulo, "messages");
			statusValidacaoPS = true;
			return statusValidacaoPS ;
		}
		
		
		if(cardapioVO.getCategoriaPratoID() == 0){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaTipoPrato");
			message.sendErrorMessageToUser(msgTitulo, "messages");
			statusValidacaoPS = true;
			return statusValidacaoPS ;
		}

		if(statusValidacaoPS == true){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaCardapio");
			message.sendErrorMessageToUser(msgTitulo, "messages");
			statusValidacaoPS = true;
			return statusValidacaoPS ;
		}
		else{
			System.out.println("TESTE 7");
			RequestContext context = RequestContext.getCurrentInstance();
			context.execute("PF('dlgComposicaoAlimentar').show();");
			return statusValidacaoPS ;
		}
	}

// ======= METHOD PERSIST -- Cardapio (Buffet / LaCarte / Infantil / SelfService / Especialidade) ===========================
	
	
	public void salvarCardapio(){
		System.out.println("salvarCardapio()....."+ tipoCardapio);
		
		if(tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
			salvarCardapioLaCarte();
		} else if(tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
			salvarCardapioInfantil();
		}

	}
	
	public void salvarCardapioLaCarte(){

		System.out.println("[Method][SalvarCardapioLaCarte()]");
		RestauranteSedeWeb restSedeObj = new RestauranteSedeWeb();
		RestauranteFilialWeb restFilialObj = new RestauranteFilialWeb();

		AlimentosService alimentoService = new AlimentosService();
		List<ComposicaoCardLaCarteWeb> compCardLaCarteAlimentoL = null;
		int idRestauranteFilial = 0;
		int idRestauranteSede = 0;
		String dtTermino;
		
		if(selectDiasSemana != null){
			String dias = preparaDiasSemana();
			cardapioVO.setDiasSemana(dias);
		}
		
		if (cardapioVO.getDtTermino() == null){
			dtTermino = (String) loginOjb.getSessao("DtTerminoContrato");
			DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
			try {
				Date date = formatter.parse(dtTermino);
				System.out.println("Data Termino....."+ date );
				cardapioVO.setDtTermino(date);
			} catch (ParseException e) {
				e.printStackTrace();
			}  
		}
		
		Date nowData = new Date();
		SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
		String dateToday = DATE_FORMAT.format(nowData);
		String dateCard = DATE_FORMAT.format(cardapioVO.getDtInicio());
		
		if(dateToday.equals(dateCard)){
			System.out.println("DATANOW = dateToday.....................................................");
			cardapioVO.setStatus(constObj.ATIVOs);
		}
		else{
			cardapioVO.setStatus(constObj.AGENDADO_ATIVACAOs);
		}

		laCarteEntity = cardapioG2EJB.setCardapioLaCarteEntity(cardapioVO);
		compCardLaCarteAlimentoL = alimentoService.convertListaAlimentoEntityLaCarte(getAlimentosDefinidosL(), laCarteEntity);
		
		// Set Entity RestauraloginOjbnte SEDE | FILIAL | ComposicaoCardapio
		laCarteEntity.setComposicaoCardLaCarteWebs(compCardLaCarteAlimentoL);
		laCarteEntity.setDtCadastro(new Date());
		
		if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_SIM)){
			System.out.println("Acesso FILIAL SIM.................");

			idRestauranteFilial = (Integer) loginOjb.getSessao("IDRestaurante");
			idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
			cardapioVO.setIdRestauranteSede(idRestauranteSede);
			cardapioVO.setIdRestauranteFilial(idRestauranteFilial);
			restSedeObj.setIdRestauranteSedeWeb(cardapioVO.getIdRestauranteSede());			
			restFilialObj.setIdRestauranteFilialWeb(cardapioVO.getIdRestauranteFilial());
			laCarteEntity.setRestauranteFilialWeb(restFilialObj);
			laCarteEntity.setRestauranteSedeWeb(restSedeObj);
			System.out.println("Acesso FILIAL SIM................."+ laCarteEntity.getRestauranteFilialWeb());
		}
		else if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_NAO)){
			System.out.println("Acesso FILIAL NÃO.................");

			idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
			cardapioVO.setIdRestauranteSede(idRestauranteSede);
			restSedeObj.setIdRestauranteSedeWeb(cardapioVO.getIdRestauranteSede());		
			laCarteEntity.setRestauranteSedeWeb(restSedeObj);
			System.out.println("Acesso FILIAL NÃO................."+ laCarteEntity.getRestauranteSedeWeb());
		}
		
		try{
			cardapioG2EJB.saveLaCarte(laCarteEntity);
			RequestContext context = RequestContext.getCurrentInstance();
			context.execute("PF('dlgMsgDecisao').show();");
		} catch (Exception e) {
			e.printStackTrace();
			String msgTitulo = PropertiesLoaderImpl.getValor("tErrorCadCardapioBuffet");
			message.sendErrorMessageToUser(msgTitulo, "");
		}
 	}
	
	
	public void salvarCardapioInfantil(){

		System.out.println("[Method][SalvarCardapioLaCarte()]");
		RestauranteSedeWeb restSedeObj = new RestauranteSedeWeb();
		RestauranteFilialWeb restFilialObj = new RestauranteFilialWeb();
		PratoSy pratoObj = new PratoSy();
		AlimentosService alimentoService = new AlimentosService();
		List<ComposicaoCardInfantilWeb> compCardInfantilAlimentoL = null;
		int idRestauranteFilial = 0;
		int idRestauranteSede = 0;
		String dtTermino;
		
		if(selectDiasSemana != null){
			String dias = preparaDiasSemana();
			cardapioVO.setDiasSemana(dias);
		}
		
		if (cardapioVO.getDtTermino() == null){
			dtTermino = (String) loginOjb.getSessao("DtTerminoContrato");
			DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
			try {
				Date date = formatter.parse(dtTermino);
				System.out.println("Data Termino....."+ date );
				cardapioVO.setDtTermino(date);
			} catch (ParseException e) {
				e.printStackTrace();
			}  
		}
		
		
		Date nowData = new Date();
		SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
		String dateToday = DATE_FORMAT.format(nowData);
		String dateCard = DATE_FORMAT.format(cardapioVO.getDtInicio());
		
		if(dateToday.equals(dateCard)){
			cardapioVO.setStatus(constObj.ATIVOs);
		}
		else{
			cardapioVO.setStatus(constObj.AGENDADO_ATIVACAOs);
		}
		
		infantilEntity = cardapioG2EJB.setCardapioInfantilEntity(cardapioVO);
		compCardInfantilAlimentoL = alimentoService.convertListaAlimentoEntityInfantil(getAlimentosDefinidosL(), infantilEntity);
		
		// Set Entity RestauraloginOjbnte SEDE | FILIAL | ComposicaoCardapio
		infantilEntity.setComposicaoCardInfantilWebs(compCardInfantilAlimentoL);
		infantilEntity.setDtCadastro(new Date());
		pratoObj.setIdPratoSys(cardapioVO.getCategoriaPratoID());
		infantilEntity.setPratoSy(pratoObj);
		
		if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_SIM)){
			System.out.println("Acesso FILIAL SIM.................");

			idRestauranteFilial = (Integer) loginOjb.getSessao("IDRestaurante");
			idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
			cardapioVO.setIdRestauranteSede(idRestauranteSede);
			cardapioVO.setIdRestauranteFilial(idRestauranteFilial);
			restSedeObj.setIdRestauranteSedeWeb(cardapioVO.getIdRestauranteSede());			
			restFilialObj.setIdRestauranteFilialWeb(cardapioVO.getIdRestauranteFilial());
			infantilEntity.setRestauranteFilialWeb(restFilialObj);
			infantilEntity.setRestauranteSedeWeb(restSedeObj);
			System.out.println("Acesso FILIAL SIM................."+ laCarteEntity.getRestauranteFilialWeb());
		}
		else if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_NAO)){
			System.out.println("Acesso FILIAL NÃO.................");

			idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
			cardapioVO.setIdRestauranteSede(idRestauranteSede);
			restSedeObj.setIdRestauranteSedeWeb(cardapioVO.getIdRestauranteSede());		
			infantilEntity.setRestauranteSedeWeb(restSedeObj);
			System.out.println("Acesso FILIAL NÃO................."+ laCarteEntity.getRestauranteSedeWeb());
		}
		
		try{
			cardapioG2EJB.saveInfantil(infantilEntity);
			RequestContext context = RequestContext.getCurrentInstance();
			context.execute("PF('dlgMsgDecisao').show();");
		} catch (Exception e) {
			e.printStackTrace();
			String msgTitulo = PropertiesLoaderImpl.getValor("tErrorCadCardapioBuffet");
			message.sendErrorMessageToUser(msgTitulo, "");
		}
 	}

	
// ======= METHOD PREPARA METHOD -- PERSISTE ===========================
	public String preparaDiasSemana(){
		String dias = null;
		
		for(String dia : selectDiasSemana){
			if(dias == null){
				dias = dia;
			}
			else{
				dias = dias + "|"+ dia;
			}
		}
		return dias;
		
	}
	

	public String getTipoCardapio() {
		return tipoCardapio;
	}

	public void setTipoCardapio(String tipoCardapio) {
		this.tipoCardapio = tipoCardapio;
	}

	public CardapioVO getCardapioVO() {
		return cardapioVO;
	}

	public void setCardapioVO(CardapioVO cardapioVO) {
		this.cardapioVO = cardapioVO;
	}

	public RestauranteSedeWeb getRestSede() {
		return restSede;
	}

	public void setRestSede(RestauranteSedeWeb restSede) {
		this.restSede = restSede;
	}

	public RestauranteFilialWeb getRestFilial() {
		return restFilial;
	}

	public void setRestFilial(RestauranteFilialWeb restFilial) {
		this.restFilial = restFilial;
	}

	public List<SelectItem> getCardapios() {
		return cardapios;
	}

	public void setCardapios(List<SelectItem> cardapios) {
		this.cardapios = cardapios;
	}


	public List<AlimentoVO> getSelectedAlimentoL() {
		System.out.println("getSelectedAlimentoL........."+ selectedAlimentoL);

		return selectedAlimentoL;
	}
	
	public void setSelectedAlimentoL(List<AlimentoVO> selectedAlimentoL) {
		System.out.println("setSelectedAlimentoL ABC................"+ selectedAlimentoL.size());

		if(selectedAlimentoL.size() > 0){

			System.out.println("IF RESULT O.K "+ selectedAlimentoL);

			for(AlimentoVO a : selectedAlimentoL){
				
				if(a.getNomeTipo() == constObj.ALIM_CARNE_AVE){
					this.avesL = selectedAlimentoL;
					System.out.println("ALIM AVES....."+ this.avesL.size());
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_CARNE_BOV)){
					System.out.println("ALIM BOVINA.....");
					this.bovinaL = selectedAlimentoL;
					System.out.println("ALIM BOVINA....."+ this.bovinaL.size());
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_CARNE_PEI)){
					this.peixeL = selectedAlimentoL;
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_CARNE_SUI)){
					this.suinaL = selectedAlimentoL;
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_CEREAIS_GER)){
					this.cereaisL = selectedAlimentoL;
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_CEREAIS_MAS)){
					this.massaL = selectedAlimentoL;
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_ACUCAR_DOC)){
					this.doceL = selectedAlimentoL;
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_FRUTAS_FRU)){
					this.frutaL = selectedAlimentoL;
				}
				else if(a.getNomeTipo().equals(constObj.ALIM_HORTAL_HORT)){
					this.hortalicaL = selectedAlimentoL;
				}
			}
		}
	}


	public List<AlimentoVO> getAlimentoTipoL() {
		System.out.println("BEGIN getAlimentoTipoL =====================================================");
		if(alimentoTipoL == null){
			alimentoTipoL = loadTipoAlimentos();
	
			for(AlimentoVO a : alimentoTipoL){
				nomeAliEspecialidadeL.add(a.getNomeTipo());
			}
		}
		return alimentoTipoL;
	}


	public void setAlimentoTipoL(List<AlimentoVO> alimentoTipoL) {
		this.alimentoTipoL = alimentoTipoL;
	}
	
	public List<AlimentoVO> getAlimentoL() {
		System.out.println("BEGIN getAlimentoL()");
		
		if(i == nomeAliEspecialidadeL.size() -1){
			i = nomeAliEspecialidadeL.size() -1;
		}
		else{
			i++;			
		}

		
		System.out.println("Numero do Alimento..........>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+ i);

		if(i <= nomeAliEspecialidadeL.size() -1){
			System.out.println("Numero do Alimento.........."+ i);
			String tipoAlimento = nomeAliEspecialidadeL.get(i);
			System.out.println("Nome do Alimento.........."+ tipoAlimento);
			
			alimentoL = loadAlimentosComposicao(alimentosGeraisL,tipoAlimento);
				
			System.out.println("END getAlimentoL().................."+ alimentoL.size());
			
			if(i == nomeAliEspecialidadeL.size() -1){
				i = -1;
			}

		}
		return alimentoL;
	}


	public void setAlimentoL(List<AlimentoVO> alimentoL) {
		this.alimentoL = alimentoL;
	}


	public String getSelectedTipoAlimento() {
		return selectedTipoAlimento;
	}


	public void setSelectedTipoAlimento(String selectedTipoAlimento) {
		this.selectedTipoAlimento = selectedTipoAlimento;
	}

	public Constantes getConstObj() {
		return constObj;
	}


	public void setConstObj(Constantes constObj) {
		this.constObj = constObj;
	}

	public String getNomeTelaCadastro() {
		return nomeTelaCadastro;
	}

	public void setNomeTelaCadastro(String nomeTelaCadastro) {
		this.nomeTelaCadastro = nomeTelaCadastro;
	}

	public String getNomeTelaCaracteristica() {
		return nomeTelaCaracteristica;
	}

	public void setNomeTelaCaracteristica(String nomeTelaCaracteristica) {
		this.nomeTelaCaracteristica = nomeTelaCaracteristica;
	}

	public String getNomeTelaComposicao() {
		return nomeTelaComposicao;
	}

	public void setNomeTelaComposicao(String nomeTelaComposicao) {
		this.nomeTelaComposicao = nomeTelaComposicao;
	}

	public String getNomeTelaAgendamento() {
		return nomeTelaAgendamento;
	}

	public void setNomeTelaAgendamento(String nomeTelaAgendamento) {
		this.nomeTelaAgendamento = nomeTelaAgendamento;
	}

	public boolean isStatusPratoFrio() {
		return statusPratoFrio;
	}

	public void setStatusPratoFrio(boolean statusPratoFrio) {
		this.statusPratoFrio = statusPratoFrio;
	}

	public boolean isStatusSobremesa() {
		return statusSobremesa;
	}

	public void setStatusSobremesa(boolean statusSobremesa) {
		this.statusSobremesa = statusSobremesa;
	}

	public boolean isStatusAcompanhamento() {
		return statusAcompanhamento;
	}

	public void setStatusAcompanhamento(boolean statusAcompanhamento) {
		this.statusAcompanhamento = statusAcompanhamento;
	}





	public boolean isStatusTelaCaracteristica() {
		System.out.println("isStatusTelaCaracteristica()"+ statusTelaCaracteristica);
		return statusTelaCaracteristica;
	}



	public void setStatusTelaCaracteristica(boolean statusTelaCaracteristica) {
		this.statusTelaCaracteristica = statusTelaCaracteristica;
	}


	public boolean isStatusValidacaoCampo() {
		return statusValidacaoCampo;
	}


	public void setStatusValidacaoCampo(boolean statusValidacaoCampo) {
		this.statusValidacaoCampo = statusValidacaoCampo;
	}


	public AlimentoVO getAlimentoVO() {
		return alimentoVO;
	}


	public void setAlimentoVO(AlimentoVO alimentoVO) {
		this.alimentoVO = alimentoVO;
	}


	public List<String> getNomeAliEspecialidadeL() {
		return nomeAliEspecialidadeL;
	}


	public void setNomeAliEspecialidadeL(List<String> nomeAliEspecialidadeL) {
		this.nomeAliEspecialidadeL = nomeAliEspecialidadeL;
	}


	public String getNomeTipoAlimento() {
		return nomeTipoAlimento;
	}


	public void setNomeTipoAlimento(String nomeTipoAlimento) {
		this.nomeTipoAlimento = nomeTipoAlimento;
	}


	public String getMensagem() {
		return mensagem;
	}


	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}


	public boolean isStatusSolicitacaoProxTela() {
		return statusSolicitacaoProxTela;
	}


	public void setStatusSolicitacaoProxTela(boolean statusSolicitacaoProxTela) {
		System.out.println("setStatusSolicitacaoProxTela "+ statusSolicitacaoProxTela);
		this.statusSolicitacaoProxTela = statusSolicitacaoProxTela;
	}


	public CardapioG2Facade getCardapioG2EJB() {
		return cardapioG2EJB;
	}


	public void setCardapioG2EJB(CardapioG2Facade cardapioG2EJB) {
		this.cardapioG2EJB = cardapioG2EJB;
	}


	public RestauranteSedeFacade getSedeEJB() {
		return sedeEJB;
	}


	public void setSedeEJB(RestauranteSedeFacade sedeEJB) {
		this.sedeEJB = sedeEJB;
	}


	public RestauranteFilialFacade getFilialEJB() {
		return filialEJB;
	}


	public void setFilialEJB(RestauranteFilialFacade filialEJB) {
		this.filialEJB = filialEJB;
	}


	public AlimentoFacade getAlimentoEJB() {
		return alimentoEJB;
	}


	public void setAlimentoEJB(AlimentoFacade alimentoEJB) {
		this.alimentoEJB = alimentoEJB;
	}

	public LoginMB getLoginOjb() {
		return loginOjb;
	}


	public void setLoginOjb(LoginMB loginOjb) {
		this.loginOjb = loginOjb;
	}


	public CardapioEspecialidadeWeb getEspecialidadeEntity() {
		return especialidadeEntity;
	}


	public void setEspecialidadeEntity(CardapioEspecialidadeWeb especialidadeEntity) {
		this.especialidadeEntity = especialidadeEntity;
	}


	public CardapioLaCarteWeb getLaCarteEntity() {
		return laCarteEntity;
	}


	public void setLaCarteEntity(CardapioLaCarteWeb laCarteEntity) {
		this.laCarteEntity = laCarteEntity;
	}


	public CardapioInfantilWeb getInfantilEntity() {
		return infantilEntity;
	}


	public void setInfantilEntity(CardapioInfantilWeb infantilEntity) {
		this.infantilEntity = infantilEntity;
	}


	public List<AlimentosTiposSy> getAlimentosGeraisL() {
		return alimentosGeraisL;
	}


	public void setAlimentosGeraisL(List<AlimentosTiposSy> alimentosGeraisL) {
		this.alimentosGeraisL = alimentosGeraisL;
	}


	public int getI() {
		return i;
	}


	public void setI(int i) {
		this.i = i;
	}


	public List<AlimentoVO> getAvesL() {
		return avesL;
	}


	public void setAvesL(List<AlimentoVO> avesL) {
		this.avesL = avesL;
	}


	public List<AlimentoVO> getBovinaL() {
		return bovinaL;
	}


	public void setBovinaL(List<AlimentoVO> bovinaL) {
		this.bovinaL = bovinaL;
	}


	public List<AlimentoVO> getSuinaL() {
		return suinaL;
	}


	public void setSuinaL(List<AlimentoVO> suinaL) {
		this.suinaL = suinaL;
	}


	public List<AlimentoVO> getPeixeL() {
		return peixeL;
	}


	public void setPeixeL(List<AlimentoVO> peixeL) {
		this.peixeL = peixeL;
	}


	public List<AlimentoVO> getFrutaL() {
		return frutaL;
	}


	public void setFrutaL(List<AlimentoVO> frutaL) {
		this.frutaL = frutaL;
	}


	public List<AlimentoVO> getHortalicaL() {
		return hortalicaL;
	}


	public void setHortalicaL(List<AlimentoVO> hortalicaL) {
		this.hortalicaL = hortalicaL;
	}


	public List<AlimentoVO> getDoceL() {
		return doceL;
	}


	public void setDoceL(List<AlimentoVO> doceL) {
		this.doceL = doceL;
	}


	public List<AlimentoVO> getCereaisL() {
		return cereaisL;
	}


	public void setCereaisL(List<AlimentoVO> cereaisL) {
		this.cereaisL = cereaisL;
	}


	public List<AlimentoVO> getMassaL() {
		return massaL;
	}


	public void setMassaL(List<AlimentoVO> massaL) {
		this.massaL = massaL;
	}


	public Date getDtAtual() {
		dtAtual = new Date();
		return dtAtual;
	}


	public void setDtAtual(Date dtAtual) {
		this.dtAtual = dtAtual;
	}


	public Date getDtExpContrato() throws ParseException {
		DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
		String data = (String) loginOjb.getSessao("DtTerminoContrato");
		dtExpContrato = formatter.parse(data); 
		return dtExpContrato;
	}


	public void setDtExpContrato(Date dtExpContrato) {
		this.dtExpContrato = dtExpContrato;
	}


	public List<String> getSelectDiasSemana() {
		
		if(selectDiasSemana != null){
			for(String diaSemana : selectDiasSemana){
				if(diaSemana.equals(semanaDia)){
					dia =  diaSemana;
				}
			}
		}
		return selectDiasSemana;
	}


	public void setSelectDiasSemana(List<String> selectDiasSemana) {
		this.selectDiasSemana = selectDiasSemana;
	}


	public Boolean getOpcDataTermino() {
		System.out.println("OpcDataTermino  "+ opcDataTermino);
		return opcDataTermino;
	}


	public void setOpcDataTermino(Boolean opcDataTermino) {
		System.out.println("OpcDataTermino  "+ opcDataTermino);
		this.opcDataTermino = opcDataTermino;
	}


	public boolean isSelectedPanelCadastro() {
		System.out.println("setSelectedPanelCadastro "+  selectedPanelCadastro);
		return selectedPanelCadastro;
	}


	public void setSelectedPanelCadastro(boolean selectedPanelCadastro) {
		this.selectedPanelCadastro = selectedPanelCadastro;
	}


	public boolean isSelectedPanelReportCad() {
		return selectedPanelReportCad;
	}


	public void setSelectedPanelReportCad(boolean selectedPanelReportCad) {
		this.selectedPanelReportCad = selectedPanelReportCad;
	}


	public List<AlimentoVO> getAlimentosDefinidosL() {
		alimentosDefinidosL = loadAlimentosDefinidosL();
		return alimentosDefinidosL;
	}


	public void setAlimentosDefinidosL(List<AlimentoVO> alimentosDefinidosL) {
		this.alimentosDefinidosL = alimentosDefinidosL;
	}


	public boolean getDiaSegunda() {
		semanaDia = constObj.DIA_SEGUNDA;
		getSelectDiasSemana();
		
		System.out.println("getDiaSegunda()"+ dia);
		if(dia != null){
			
			if(dia.equals(constObj.DIA_SEGUNDA)){
				diaSegunda = true;
				System.out.println("getDiaSegunda() IF 1 "+ diaSegunda );
			}
			else{
				diaSegunda = false;
				System.out.println("getDiaSegunda() ELSE 1 "+ diaSegunda );
			}
		}
		System.out.println("getDiaSegunda() result"+ diaSegunda );
		return diaSegunda;
	}


	public void setDiaSegunda(boolean diaSegunda) {
		this.diaSegunda = diaSegunda;
	}


	public boolean getDiaTerca() {
		semanaDia = constObj.DIA_TERCA;
		getSelectDiasSemana();

		if(dia != null){
		
			if(dia.equals(constObj.DIA_TERCA)){
				diaTerca = true;
			}
			else{
				diaTerca = false;
			}
		}
		return diaTerca;
	}


	public void setDiaTerca(boolean diaTerca) {
		this.diaTerca = diaTerca;
	}


	public boolean getDiaQuarta() {
		semanaDia = constObj.DIA_QUARTA;
		getSelectDiasSemana();
		
		if(dia != null){
			
			if(dia.equals(constObj.DIA_QUARTA)){
				diaQuarta = true;
			}
			else{
				diaQuarta = false;
			}
		}
		return diaQuarta;
	}


	public void setDiaQuarta(boolean diaQuarta) {
		this.diaQuarta = diaQuarta;
	}


	public boolean getDiaQuinta() {
		semanaDia = constObj.DIA_QUINTA;
		getSelectDiasSemana();

		if(dia != null){

			if(dia.equals(constObj.DIA_QUINTA)){
				diaQuinta = true;
			}
			else{
				diaQuinta = false;
			}
		}
		return diaQuinta;
	}


	public void setDiaQuinta(boolean diaQuinta) {
		this.diaQuinta = diaQuinta;
	}


	public boolean getDiaSexta() {
		semanaDia = constObj.DIA_SEXTA;
		getSelectDiasSemana();
		
		if(dia != null){
			if(dia.equals(constObj.DIA_SEXTA)){
				diaSexta = true; 
			}
			else{
				diaSexta = false;
			}
		}
		return diaSexta;
	}


	public void setDiaSexta(boolean diaSexta) {
		this.diaSexta = diaSexta;
	}


	public boolean getDiaSabado() {
		semanaDia = constObj.DIA_SABADO;
		getSelectDiasSemana();
		
		if(dia != null){
			if(dia.equals(constObj.DIA_SABADO)){
				diaSabado = true; 
			}
			else{
				diaSabado = false;
			}
		}
		return diaSabado;
	}


	public void setDiaSabado(boolean diaSabado) {
		this.diaSabado = diaSabado;
	}


	public boolean getDiaDomingo() {
		semanaDia = constObj.DIA_DOMINGO;
		getSelectDiasSemana();
		if(dia != null){

			if(dia.equals(constObj.DIA_DOMINGO)){
				diaDomingo = true; 
			}
			else{
				diaDomingo = false;
			}
		}
		return diaDomingo;
	}


	public void setDiaDomingo(boolean diaDomingo) {
		this.diaDomingo = diaDomingo;
	}


	public String getDia() {
		return dia;
	}


	public void setDia(String dia) {
		this.dia = dia;
	}


	public String isSemanaDia() {
		return semanaDia;
	}


	public void setSemanaDia(String semanaDia) {
		this.semanaDia = semanaDia;
	}


	public String getNomeTelaReport() {
		return nomeTelaReport;
	}


	public void setNomeTelaReport(String nomeTelaReport) {
		this.nomeTelaReport = nomeTelaReport;
	}


	public String getNomeCardapio() {
		return nomeCardapio;
	}


	public void setNomeCardapio(String nomeCardapio) {
		this.nomeCardapio = nomeCardapio;
	}


	public boolean isStatusPratoQuente() {
		return statusPratoQuente;
	}


	public void setStatusPratoQuente(boolean statusPratoQuente) {
		this.statusPratoQuente = statusPratoQuente;
	}


	public boolean isSelectedG2PrFrio() {
		return selectedG2PrFrio;
	}


	public void setSelectedG2PrFrio(boolean selectedG2PrFrio) {
		this.selectedG2PrFrio = selectedG2PrFrio;
	}


	public boolean isSelectedG2Sobremesa() {
		return selectedG2Sobremesa;
	}


	public void setSelectedG2Sobremesa(boolean selectedG2Sobremesa) {
		this.selectedG2Sobremesa = selectedG2Sobremesa;
	}


	public boolean isSelectedG2Couvert() {
		return selectedG2Couvert;
	}


	public void setSelectedG2Couvert(boolean selectedG2Couvert) {
		this.selectedG2Couvert = selectedG2Couvert;
	}


	public boolean isSelectedG2PrQuente() {
		return selectedG2PrQuente;
	}


	public void setSelectedG2PrQuente(boolean selectedG2PrQuente) {
		this.selectedG2PrQuente = selectedG2PrQuente;
	}


	public boolean isStatusDias() {
		return statusDias;
	}


	public void setStatusDias(boolean statusDias) {
		this.statusDias = statusDias;
	}


	public static long getSerialversionuid() {
		return serialVersionUID;
	}


	public String getSemanaDia() {
		return semanaDia;
	}


	public PratoFacade getPratoEJB() {
		return pratoEJB;
	}


	public void setPratoEJB(PratoFacade pratoEJB) {
		this.pratoEJB = pratoEJB;
	}


	public List<PratoSy> getPratoL() {
		
		if(pratoL == null){
			pratoL = pratoEJB.findTipoPratoByAll();
		}
		return pratoL;
	}


	public void setPratoL(List<PratoSy> pratoL) {
		this.pratoL = pratoL;
	}


	public String getSelectTipoPrato() {


		if(getPratoL() != null){
			for(PratoSy pratoObj : getPratoL()){
				if(cardapioVO.getCategoriaPratoID() == pratoObj.getIdPratoSys()){
					selectTipoPrato = pratoObj.getDescricao();
					return selectTipoPrato;
				}
			
			}
		}
		return selectTipoPrato;
	}


	public void setSelectTipoPrato(String selectTipoPrato) {
		this.selectTipoPrato = selectTipoPrato;
	}


	public String getTesteVO() {
		return testeVO;
	}


	public void setTesteVO(String testeVO) {
		this.testeVO = testeVO;
	}


	public boolean isSelectedG2PrAcompanhamento() {
		return selectedG2PrAcompanhamento;
	}


	public void setSelectedG2PrAcompanhamento(boolean selectedG2PrAcompanhamento) {
		this.selectedG2PrAcompanhamento = selectedG2PrAcompanhamento;
	}

}
